Generally, conventional high speed serial data transmission protocols support some form of “retry” operation, according to which packets (e.g., data packets) sent by a transmitting agent (e.g., host device) that are incorrectly or unsuccessfully received by a receiving agent (e.g., memory device) can be retransmitted upon request. The unsuccessful receipt of packets may be determined, for example, based on high bit error rates. A retry operation involves the receiving agent unsuccessfully receiving packets from the transmitting agent on a forward link of a bus, and then sending information to the transmitting agent, usually on a return link, identifying the packets that need to be retransmitted. To enable a retry operation, a retry buffer is provided to temporarily store transmitted packets until it is confirmed by the receiving agent that the packets have been received successfully (i.e., thus requiring no retry operation). At this point, the buffered transmitted packets may be disregarded and overwritten, if necessary. Otherwise, when the receiving agent does not confirm that the packets have been received successfully, the retry operation is initiated, resulting in retransmission of buffered packets from the last point of known successful transmission.
Some transmission protocols, such as Hybrid Memory Cube (HMC) protocol, communicate information identifying the packets that need to be retransmitted using a pointer exchange operation. For example, the HMC protocol provides packets consisting of 128-bit flow units, each of which is referred to as a “FLIT” (“FLow unIT”). A retry pointer is transmitted with each packet to represent the packet's position within in the retry buffer. Retry pointers may include a forward retry pointer (FRP) that travels in the forward direction on a forward link with each packet, and a reverse retry pointer (RRP), which is the same retry pointer traveling in the reverse direction on a reverse link (e.g., the other side of the forward link), thereby completing a round trip. The retry buffer is addressed using FLIT addresses, and the retry pointers represent corresponding packet positions in the retry buffer. For example, each packet transmitted by the transmitting agent contains an 8-bit FRP field that indicates the address at which the packet is stored inside the retry buffer. Likewise, each packet returned from the receiving agent to the transmitting agent contains an 8-bit RRP field that indicates the value of the latest successfully received FRP. The transmitting agent may therefore learn which packets have been successfully received by the receiving agent by looking at the RRP fields on the returned packets. The RRP is the same retry pointer traveling back on the reverse the link, completing the round trip. More details of the HMC protocol are described, for example, by Hybrid Memory Cube Consortium, “Hybrid Memory Cube” (2012), the entire contents of which are hereby incorporated by reference.
However, a limitation of using a pointer exchange-based protocol is that allowable space in the retry buffer is limited by the space that the retry pointers have been sized to address. Accordingly, there is a need to expand the retry buffer space to avoid such limitation. Further, in the event the incoming packets are to be streamed in real-time, the buffering of the packets must continue even while attempting to execute a retry operation (retransmitting packets that have already been sent). Under these circumstances, conventional systems generally require suspending the incoming (real-time) packet stream or dropping some of the packets of the incoming packet stream to accommodate the retry operation.
Implementation of two buffers with two separate memories may address these issues, where one buffer acts as the retry buffer and the other buffer (located upstream of the retry buffer) is simply a first-in first-out (FIFO) buffer. However, each chip memory has associated overhead (e.g., BIST circuitry), so architecture effectively has twice the overhead and twice the chip area.